我正试图在网页上使用selenium,但我的代码不能始终如一地工作——有时什么都没发生,driver.wait
承诺没有实现——它只是永远等待。。。我的代码如下:
await this.driver.wait(until.elementLocated(By.xpath("xpath1")));
const searchField = await this.driver.findElement(By.xpath("xpath1"));
await searchField.click();
const input = await this.getElement("xpath2");
await input.sendKeys("SearchTerm", Key.RETURN);
为什么它有时有效,有时无效,我知道xpath不会改变,我已经尝试设置非常高的硬编码this.driver.sleep(10000)
超时。
试试这个:
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
这个是什么:
Selenium中的隐式等待用于告诉web驱动程序在抛出"等待"之前等待一定时间;没有这样的元素例外";。默认设置为0。一旦我们设置了时间,web驱动程序就会在抛出异常之前等待元素一段时间。
SeleniumWebDriver借鉴了Watir的隐式等待思想。
在下面的示例中,我们声明了一个隐式等待,时间范围为10秒。这意味着,如果元素在该时间范围内没有位于网页上,它将抛出异常。
基本语法:
driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);
编辑:如果这对联盟没有帮助,你可以试试这个:
driver.wait(function () {
return driver.isElementPresent(webdriver.By.xpath("yourxpath"));
},超时(;
//事实上,我不太熟悉javascript,但我希望你能理解我的意思
这会使网络驱动程序等待10秒,直到您要查找的元素可见