Невозможно нажать на кнопку «Зарегистрироваться по электронной почте» - PullRequest
0 голосов
/ 23 октября 2018

Я хочу нажать на кнопку «Зарегистрироваться по электронной почте».Когда я нажимаю на ссылку «Зарегистрироваться» на https://www.starwars.com/. Не могли бы вы помочь с тем же.

enter image description here

Я написалкод ниже.Он не выдает никаких ошибок, но не нажимает кнопку «Зарегистрироваться по электронной почте».

homePage.click_signUpWithEmailBtn();

//Buttons
    private By signUpWithEmailBtn  = getLocator("a.btn.btn-email.ng-isolate-scope", BY_TYPE.BY_CSSSELECTOR);

public void click_signUpWithEmailBtn(){     
        Assert.assertTrue(this.signUpWithEmailBtn_Presence(), "'Sign up with email' button is absent on the home page.");
        takeScreenshot("Click on 'Sign up with email' button on the home page.");
        click(signUpWithEmailBtn);  
        takeScreenshot("Click on 'Sign up with email' button on the home page.");
    }

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

попробуйте,

driver.switchTo().frame("disneyid-iframe");
iframe = driver.find_element_by_xpath("//iframe[contains(@src,'https://secure.starwars.com/_swdid/www.starwars.com')")
driver.switchTo().frame(iframe );
driver.findElement("//a[text()='Sign up with email']").click();
driver.switchTo().defaultContent();
0 голосов
/ 23 октября 2018

Согласно URL https://www.starwars.com/ для вызова click() для элемента с текстом Зарегистрироваться по электронной почте вам необходимо:

  • Индуцировать WebDriverWait для элемента стекст как SIGNUP должен быть активным для клика.
  • Стимулировать WebDriverWait для родительского доступного фрейма и переключиться на него .
  • Индуцируйте WebDriverWait для доступного iframe child и переключитесь на него .
  • Индуцируйте WebDriverWait для элемента с текстом Зарегистрируйтесь по электронной почте чтобы быть активным.
  • Вы можете использовать следующее решение.

    • Кодовый блок:

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait 
      from selenium.webdriver.support import expected_conditions as EC
      
      url = 'https://www.starwars.com/'
      options = webdriver.ChromeOptions() 
      options.add_argument("start-maximized")
      driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get(url)
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='nav-utility']//div[@class='disid-signup log-in-out']"))).click()
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[src*='starwars.com?loc=en-US']")))
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#disneyid-iframe[name='disneyid-iframe']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn btn-email ng-isolate-scope' and contains(@ng-click,'emailSignUp')]"))).click()
      
  • Снимок браузера:

starwars_create_account

0 голосов
/ 23 октября 2018

Создать учетную запись присутствует внутри iframe .Чтобы щелкнуть по Зарегистрироваться с помощью электронной почты , вам необходимо переключиться на соответствующий iframe перед тем, как продолжить щелчок.

Найдите приведенный ниже код в Java для переключения между вложенными фреймами.

Переключиться на внешнюю рамку

У него нет идентификатора или имени.Так что переключайтесь с параметром веб-элемента.

WebElement outterFrameElement = driver.findElement(By.xpath("//iframe[@allowtransparency='true']"));
driver.switchTo().frame(outterFrameElement);

Переключитесь на внутренний фрейм:

Внутренний идентификатор iframe = disneyid-iframe

driver.switchTo().frame("disneyid-iframe");

Чтобы переключиться вне фрейма или на контент по умолчанию, используйте приведенный ниже.

driver.switchTo().defaultContent();
...