我在seleniumn中找到web元素时遇到困难,html如下:
<div class="d2l-fieldgroup">
<div class=" vui-field-row">
<span class="d2l-field vui-label d2l-offscreen">Do not ask me again for this application</span>
<label class="d2l-checkbox-container">
<input name="dontAsk" value="0" type="hidden">
<input id="dontAsk" class="d2l-checkbox vui-input vui-outline" type="checkbox">
Do not ask me again for this application
</label>
</div>
</div>
我需要点击复选框或文字,但我似乎无法做到这一点,因为我总是收到错误回复说:
Unable to locate element: {"method":"class name","selector"
我试过了:
WebElement do_not_ask_resourcebank = driver.findElement(By.className("d2l-fieldgroup"));
do_not_ask_resourcebank.click();
但是得到以下错误:
no such element: Unable to locate element: {"method":"class name","selector":"d2l-fieldgroup"}
我也尝试用vui-field-row和d2l-checkbox-container替换d2l-fieldgroup
我也尝试过:
WebElement do_not_ask_resourcebank = driver.findElement(By.cssSelector("html/body/form/div/div[3]/div/label"));
和
WebElement do_not_ask_resourcebank = driver.findElement(By.xpath("id('confirmForm')/x:div/x:div[3]/x:div/x:label"));
但我似乎无法点击这个元素,对像我这样的新手来说非常令人沮丧。有人能指出我哪里出错了吗?
答案 0 :(得分:0)
如果您获得NoSuchElementException
作为提供的例外情况,可能有以下原因: -
您可能正在使用不正确的定位器进行定位,您正在找到具有类名的实际<div>
元素,该类看起来像动态生成的类名而不是您想要的实际<input type = 'checkbox'>
元素。其他也看起来不稳定,你应该尝试使用By.id()
定位欲望元素: -
WebElement do_not_ask_resourcebank = driver.findElement(By.id("dontAsk"));
可能是在你要找到元素的时候,它不会出现在DOM
上,所以你应该实现WebDriverWait
等待元素可见,如下所示: -
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dontAsk")));
此元素可能位于任何frame
或iframe
内。如果是,您需要在找到以下元素之前切换frame
或iframe
: -
WebDriverWait wait = new WebDriverWait(driver, 10);
//Find frame or iframe and switch
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("your frame id or name"));
//Now find the element
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dontAsk")));
//Once all your stuff done with this frame need to switch back to default
driver.switchTo().defaultContent();
已修改:
我还没有尝试过iframe,因为我不确定我在做什么我还没有使用过这个工具。 iframe的html代码为:
<iframe id="d2l_1_69_954" class="d2l-iframe d2l-iframe-fullscreen d2l_1_67_746" name="d2l_1_69_954" src="/d2l/lms/remoteplugins/lti/launchLti.d2l?ou=6606&pluginId=f8acc58b-c6d5-42df-99d9-e334f825c011&d2l_body_type=3" title="TALLPOD" scrolling="auto" allowfullscreen="" onload="this.m_loaded=true;" style="height: 314px;" frameborder="0">
您如何使用上面的示例找到此iframe?
看起来iframe
id
和name
都是动态生成的,每当您找到时都可以更改,您应该尝试使用唯一定位器找到此iframe
,我认为它title name
是唯一且固定的,所以在找到所需的元素之前,你应该尝试找到这个iframe
: -
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[title='TAFEPOC']"));