selenium-element是可点击的,但点击仍然失败

nnsrf1az  于 2021-06-27  发布在  Java
关注(0)|答案(4)|浏览(545)

这是我的密码

do {
    try {
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath(xpLand)));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        driver.findElement(By.xpath(xpLand)).click();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Thread.sleep(500);
    if (i > 20 ) {
        break;
    }
    i++;
} while (driver.findElements(By.xpath(xpLand)).size() > 0);

网址https://win.milwaukeetool.eu/# elementToBeClickable 作品(我也尝试过不同版本的 visible 以及其他替代方法),不会引发异常。 click 也可以,但单击不会触发任何操作。最后是 while -情况也是如此 true .
所发生的情况是,页面加载(在上面的代码之外),clickable得到满足,click没有抛出异常,while条件大于0(如果click有效,那么将加载一个新页面,它将为0),然后它重新开始。
屏幕尺寸1440 x 900-23(23=菜单栏高度)xpland= //img [@src='/img/countries/se.svg'] 奇怪的是,它有一半的时间可以工作,但另一半却失败了(我只运行了大约400次,每次运行了大约200次)。如果在代码被卡住时手动单击链接,则单击会导致预期的结果。
就像有时会卡住一样。我有一个外循环(上面看不到),用同一个驱动程序运行十次,然后启动一个新的驱动程序。如果它“卡住了”,在这十个循环完成并启动新的驱动程序之前,它不会再工作。然后它可能工作5-10次,直到它再次卡住。
使用chrome/chromedriver。

5w9g7ksd

5w9g7ksd1#

在你的第一次 try/catch{} 阻止而不是仅仅诱导webdriverwait调用 click() 返回元素后,如下所示:

do {
    try {
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath(xpLand))).click();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Thread.sleep(500);
    if (i > 20 ) {
        break;
    }
    i++;
} while (driver.findElements(By.xpath(xpLand)).size() > 0);
nqwrtyyt

nqwrtyyt2#

您需要尝试javascript执行器click
webelement button=driver.findelement(by.id(“btn”));
javascriptexecutor js=(javascriptexecutor)驱动程序;
js.executescript(“参数[0].click();”,按钮);

yjghlzjz

yjghlzjz3#

“优雅”的解决方案 JavascriptExecutor 可能是这样的:

WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(xpLand)));
((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);

使用时 JavascriptExecutor 有人可能会说“这不是真正的用户交互”,
它实际上并不是对用户交互的模拟,但在某些情况下,我们确实需要一个可靠的非片状解决方案来解决意外行为,而这正是我们所需要的。
您还可以 Package 不同的单击功能,这样就不必重复它们:

public void click(WebElement element) {
    wait.until(ExpectedConditions.elementToBeClickable(element)).click();
}
public void clickJS(WebElement element) {
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(element));
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
}
i7uq4tfw

i7uq4tfw4#

请尝试js click而不是webdriver click,如下所示
javascriptexecutor executor=(javascriptexecutor)驱动程序;executor.executescript(“参数[0].click();”,xpland公司);

相关问题