无法使用selenium在outlook上单击“登录”按钮

68de4m5k  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(385)

单击outlook上的以下按钮时遇到问题:

<a data-m="{"cN":"SIGNIN", "sN":"P6", "pV":"1"}" href="https://outlook.live.com/owa/?nlp=1" class="internal sign-in-link" data-task="signin">Sign in</a>

我尝试了以下两种代码:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(text(), 'Sign in')]"))).click();

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-task='signin']"))).click();

终端为他们两个发送一个模糊的nosuchelementexception。
XPath可能不正确吗?

3df52oht

3df52oht1#

您可以从googlechrome浏览器复制完整的xpath,然后粘贴到您的代码中。要复制它,请按ctrl+shift+i,找到元素并单击copy>copyfullxpath。
这是您的完整xpath:

/html/body/header/div/aside/div/nav/ul/li[2]/a

下面的python代码适合我:


# python solution

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://outlook.live.com/")
time.sleep(3)
driver.find_element_by_xpath('/html/body/header/div/aside/div/nav/ul/li[2]/a').click()
kognpnkq

kognpnkq2#

元素是动态元素,所以 click() 在元素上使用文本作为登录,而不是使用 visibilityOfElementLocated() 你需要诱导webdriverwait elementToBeClickable() 您可以使用以下任一定位器策略: linkText :

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Sign in"))).click();
``` `cssSelector` :

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.internal.sign-in-link[data-task='signin']"))).click();
``` xpath :

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='internal sign-in-link' and text()='Sign in']"))).click();

参考文献

关于nosuchelementexception,您可以在以下内容中找到一些相关的详细讨论:
线程“main”org.openqa.selenium.nosuchelementexception中出现异常:找不到元素://*[@id='login-email']
ie中的org.openqa.selenium.nosuchelementexception错误,但在chrome和firefox中同样的代码可以正常工作

相关问题