我试图单击一个元素,但总是收到错误“无法使用..定位元素”。 我已经尝试通过类,csselector和XPath进行查找。我也先尝试了一个class,然后再尝试了span class元素,但是它仍然无法正常工作。绝对也是正确的框架。 这真的很奇怪,因为它已经在两个星期前工作了,我没有更改代码中的任何内容,现在却无法工作。元素可能会不断变化吗?如果是这样,我如何确保它仍然可以找到元素而无需每次都调整代码?
<a class="ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all" href="#" aria-label="Close" role="button">
<span class="ui-icon ui-icon closethick">
::after
</span>
</a>
这是我当前的当前代码,仍然无法使用:
driver.switchTo().defaultContent();
driver.switchTo().frame("frame_vehicleFileTab");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
WebElement closePrint = (new WebDriverWait(driver, 10)).until(
ExpectedConditions.elementToBeClickable(By.xpath("//*[@aria-label='Close']")));
closePrint.click();
通过搜索以下元素尝试DebanjanB的建议之后:
driver.findElement(By.xpath("//a[@class='ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all' and @aria-label='Close']")).click();
我收到此错误:org.openqa.selenium.ElementNotInteractableException:元素无法滚动到视图中
更新:我通过获取Firefox的Selenium IDE扩展,然后选择了由该扩展生成的xpath以及javascript执行程序来修复了该问题:
WebElement closePrint = (new WebDriverWait(driver, 10)).until(
ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='FileTab:Form:j_id674351400_da78919']/div/a/span")));
JavascriptExecutor js1 = (JavascriptExecutor)driver;
js1.executeScript("arguments[0].click();", closePrint);
我不知道为什么xpath现在可以工作,但我很高兴它能工作。谢谢大家的建议!
答案 0 :(得分:1)
通过<span>
标签定位该元素非常困难,因为它是 pseudo 元素。要查找元素,可以使用以下Locator Strategies中的任何一个:
cssSelector
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.ui-dialog-titlebar-icon.ui-dialog-titlebar-close.ui-corner-all[aria-label='Close']"))).click();
xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all' and @aria-label='Close']"))).click();
答案 1 :(得分:0)
据我所提供的HTML所见:
您可以将By.XPATH
用于以下XPATH:"//*[@aria-label='Close']"
。
赞:
d.findElement(By.xpath("//*[@aria-label='Close']")).click();
编辑:
尝试将Actions
与“偏移量”结合使用,如果有覆盖元素的元素,这会很有帮助,这在iFrame中会发生。
这是一个代码片段:
WebElement closePrint = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all' and @aria-label='Close']")));
int width = closePrint.getSize().getWidth();
Actions clicker= new Actions(driver);
act.moveToElement(closePrint).moveByOffset((width/2)-2, 0).click().perform();
希望这对您有帮助!
答案 2 :(得分:0)
除了DebanjanB的建议之外,我还建议您使用下面的JavaScript实用工具向下滚动直到该元素可见。
WebElement element = driver.findElement(By.xpath("//a[@class='ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all' and @aria-label='Close']"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);