无法获取正确的 WebElement 标识符(在 iCloud.com 上登录)
Posted
技术标签:
【中文标题】无法获取正确的 WebElement 标识符(在 iCloud.com 上登录)【英文标题】:Can not take correct identifier of WebElement (Sign in at iCloud.com) 【发布时间】:2020-04-05 17:17:51 【问题描述】:我无法识别“使用 Apple ID 登录”元素(在 iclod.com 页面上)。
这是我现在使用的:
WebElement username = driver.findElement(By.xpath("//[@id=\"account_name_text_field\"]");
username.sendKeys("my_email@icloud.com");
另外,我尝试使用由 Chropath 和 Ranorex 创建的 CSS,但仍然无法正常工作。 我做错了什么?
Path to needed Element
【问题讨论】:
你试过 By.cssSelector("#account_name_text_field") 吗? 【参考方案1】:请检查以下解决方案。 iframe 与您的网页相关联,您需要先切换到 iframe,然后再与网页元素输入框交互。
driver = webdriver.Chrome(executable_path=r" path of chromedriver.exe")
driver.maximize_window()
wait = WebDriverWait(driver, 10)
driver.get("https://www.icloud.com")
wait.until(EC.presence_of_element_located((By.ID, "auth-frame")))
driver.switch_to.frame("auth-frame")
inputBox = wait.until(EC.element_to_be_clickable((By.ID, "account_name_text_field")))
inputBox.send_keys("your test")
# switch back to main window
driver.switch_to.default_content()
输出:
【讨论】:
您是否愿意 accept 回答您的问题。【参考方案2】:元素在iframe
里面,需要先切换。
你可以使用.frameToBeAvailableAndSwitchToIt
:
driver.get("https://www.icloud.com/");
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("auth-frame")));
WebElement username = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("account_name_text_field")));
username.sendKeys("my_email@icloud.com");
添加WebDriverWait
,网页加载比较长。
【讨论】:
【参考方案3】:iframe 可能很棘手。在访问该文本框之前,您必须将焦点更改为框架。 使用switchTo().frame();
可以采用以下参数:
-
switchTo().frame(int frame number):定义帧索引号,
驱动程序将切换到该特定帧
switchTo().frame(字符串
frameNameOrId):定义框架元素或 Id,Driver 将
切换到该特定框架
switchTo().frame(WebElement
frameElement): 定义框架 web 元素,Driver 将
切换到该特定框架
WebDriver driver = new FirefoxDriver();
waitdriver = new WebDriverWait(driver , 10);
driver.get("https://www.icloud.com/");
driver.switchTo().frame("auth-frame");
waitdriver.until(ExpectedConditions.presenceOfElementLocated( By.xpath("//*[@id=\"account_name_text_field\"]")));
WebElement textbox=driver.findElement(By.xpath("//*[@id=\"account_name_text_field\"]"));
textbox.click();
textbox.sendKeys("HelloWorld@gmail.com");
【讨论】:
【参考方案4】:1) 你写的 xpath 模式是错误的。 2) 在您的脚本中使用之前,您始终可以在 ChroPath 中验证 xpath 或 cssSelector。 3) 如果元素在 iframe 内,那么您必须在 ChroPath 中获得 iframe xpath 以及元素 xpath。请使用它们。 请按照此视频教程充分利用 ChroPath 的 iframe feature。
【讨论】:
以上是关于无法获取正确的 WebElement 标识符(在 iCloud.com 上登录)的主要内容,如果未能解决你的问题,请参考以下文章