const selenium = require('selenium-webdriver');
require('chromedriver');
const By = selenium.By;
const driver = new selenium.Builder().forBrowser('chrome').build();
const url = 'https://example.com';
driver.get(url);
driver.findElement(By.css('header nav .header-nav-item-sign-in > .header-nav-link')).click();
// finding elements on the new URL that has been opened by clicking on the link
driver.findElement(By.css('#user_session_email')).sendKeys('example@email.com');
driver.findElement(By.css('#user_session_password')).sendKeys('example');
driver.findElement(By.css('button.button.primary[type=submit]')).click();
我打开"example.com"并找到一个链接元素。我单击链接并尝试在同一选项卡中打开的新URL上找到一个元素。我收到以下错误:
UnhandledPromiseRejectionWarning: NoSuchElementError: no such element: Unable to locate element:
如何更新硒中的网址?
注意:使用的链接是虚拟链接。实际页面具有以下元素。我无法更新其中存在的网址硒。
我认为这是一个基本的 UI 自动化问题。您需要确保您在此处打开的页面已完全加载,并且元素已准备好使用诸如sendKeys之类的操作进行操作。
最好的方法是使用 wait 语句并确保在对元素执行任何操作之前加载元素(下面的代码(。
//wait till the element is located. Throws timeout error if the element is not located in 10 seconds
const user_session_email = driver.wait(
until.elementLocated(By.css('#user_session_email')),
10000
);
//act on the element
user_session_email.sendKeys('example@email.com');
此方法的优点是,如果元素位于指定的完整 10 秒之前,则此方法不会等待整整 10 秒。