Невозможно получить правильный идентификатор WebElement (войдите на iCloud.com) - PullRequest
0 голосов
/ 05 апреля 2020

У меня проблемы с определением элемента "войти с Apple ID" (на странице iclod.com).

Это то, что я сейчас использую:

WebElement username = driver.findElement(By.xpath("//[@id=\"account_name_text_field\"]");
username.sendKeys("my_email@icloud.com");

Также я пытался использовать CSS, созданный Chropath и Ranorex, все еще не работает. Что я делаю не так?

Путь к нужному элементу

Ответы [ 4 ]

0 голосов
/ 05 апреля 2020

1) Шаблон xpath, который вы написали, неверен. 2) Вы всегда можете проверить xpath или cssSelector в ChroPath, прежде чем использовать его в своем скрипте. 3) Если элемент находится внутри iframe, то вы должны получить iframe xpath, а также элемент xpath в ChroPath. Пожалуйста, используйте их. Пожалуйста, следуйте этой видео-инструкции, чтобы наилучшим образом использовать эту функцию iframe ChroPath.

0 голосов
/ 05 апреля 2020

Пожалуйста, проверьте ниже решение. 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()

output:

enter image description here

0 голосов
/ 05 апреля 2020

Ифреймы могут быть хитрыми. Вы должны изменить фокус на кадр, прежде чем получить доступ к этому текстовому полю. Используйте switchTo (). Frame ();

. Может принимать следующие параметры:

  1. switchTo (). Frame (int номер кадра): определение номера индекса кадра, драйвера переключится на этот указанный c frame
  2. switchTo (). frame (string frameNameOrId): Определяя элемент frame или Id, драйвер переключится на этот указанный c frame
  3. switchTo () .frame (WebElement frameElement): определяя веб-элемент фрейма, драйвер переключается на этот параметр c frame

enter image description here

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");
0 голосов
/ 05 апреля 2020

Элемент находится внутри 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, загрузка веб-страниц довольно длинная .

...