これを展開して折りたたむ機能を持つウィジェットボタンをクリックしようとしています。何らかの理由で、私はこの要素の特定にいくつかの困難を抱えています。私はいつもスローはNoSuchElementExceptionを得る:Seleniumを使用して要素(ウィジェット)を見つけることができませんNoSuchElementException
org.openqa.selenium.NoSuchElementException:
no such element: Unable to locate element: {"method":"cssselector","selector":"span[id^='d2l_1_24']>a[title='Expand News']"}
おかしい事はある、私は次のように何の困難を持っていない要素見つけるためには、FireFox放火犯を使用する場合:それは常にノードを返し
span[id^='d2l_1_24']>a[title='Expand News']
span[id^='d2l_1_24']>a[title='Collapse News']
を。
以前の質問を調査した後、私はウィジェットが別のiFrameにあると判断しました。開発ツールは、それがトップウィンドウにあることを示します。次のように
HTMLは、次のように
<div id="d2l_1_169_906" class="d2l-widget-header d2l-widget-header-clickable d2l_1_166_935 d2l_1_167_808 d2l_1_168_85 d2l_1_165_766" data-d2l-collapsed="d2l_1_165_766" onclick="D2L.O("__g1",25)()">
<div class="d2l-homepage-header-wrapper">
<div class="d2l-homepage-header-menu-wrapper">
<div class="d2l-homepage-header-collapse-wrapper">
<span id="d2l_1_24_470" class="d2l-expandcollapse d2l_1_117_742">
<a id="d2l_1_186_505" class="d2l-imagelink d2l_1_117_742 d2l_1_187_114 vui-outline" href="javascript:void(0);" onclick="return false;" title="Expand News" aria-label="Expand News" role="button"/>
<a id="d2l_1_188_574" class="d2l-imagelink d2l_1_117_742 d2l_1_189_251 vui-outline d2l-hidden" href="javascript:void(0);" onclick="return false;" title="Collapse News" aria-label="Collapse News" role="button"/>
</span>
</div>
<div class="d2l-clear"/>
</div>
私のコードは次のとおりです。
//instance fields
static WebDriver driver;
private WebElement news_widget_expand;
private WebElement news_widget_collapse;
//constructor
public HomePage(){
WebDriver driver;
}
public void set_pageobject_news_widget_dropdown(WebDriver driver){
try {
driver.switchTo().defaultContent();
news_widget_collapse = driver.findElement(By.cssSelector("span[id^='d2l_1_24']>a[title='Expand News']"));
//news_widget_expand = driver.findElement(By.xpath(".//*[starts-with(@id, 'd2l_1_186')]"));
//news_widget_expand = driver.findElement(By.cssSelector("div[class='d2l-homepage']>div>div>div>div>span[id^='d2l_1_24']>a[title='Expand News']"));
news_widget_collapse = driver.findElement(By.cssSelector("span[id^='d2l_1_24']>a[title='Collapse News']"));
//news_widget_collapse = driver.findElement(By.xpath(".//*[starts-with(@id, 'd2l_1_188')]"));
//news_widget_expand = driver.findElement(By.cssSelector("div[class='d2l-homepage']>div>div>div>div>span[id^='d2l_1_24']>a[title='Collapse News']"));
} catch (Exception e) {
System.out.println("Couldnt set page objects");
e.printStackTrace();
}
}
public void collapse_news(WebDriver driver) throws InterruptedException{
try {
news_widget_collapse.click();
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Couldn't collapse the news widget...");
}
}
public void expand_news(WebDriver driver) throws InterruptedException{
try {
news_widget_expand.click();
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Couldn't expand the news widget...");
}
}
次のようにコードが呼び出されます。
Thread.sleep(2000);
//expand the widget
hp.set_pageobject_news_widget_dropdown(driver);
hp.expand_news(driver);
ですそこには何も明らかではない私はここで行方不明ですか?
投稿したHTMLに基づき、 'Expand News'は' id = "d2l_1_186_505" ' –
@ ScaryWombatです。idは静的ではなく、ページが更新されるたびに変わります。私は次のようにしてみました: 'driver.findElement(By.cssSelector(" div [id^= 'd2l_1_186 _'] [title = 'Expand News'] "))。 – tarquin