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:
如何在Selenium中更新网址?
注意:使用的链接是虚拟链接。实际页面具有以下元素。我无法更新网址中存在的selenium。
答案 0 :(得分:0)
我认为这是一个基本的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秒。