无法单击“使用电子邮件注册”按钮

时间:2018-10-23 03:26:28

标签: selenium selenium-webdriver iframe webdriverwait

我想单击“使用电子邮件注册”按钮。当我点击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 :(得分:2)

创建帐户位于 iframe 中。要点击通过电子邮件注册,您需要先切换到相应的iframe,然后再继续点击。

找到以下Java代码在嵌套框架之间进行切换。

切换到外框

它没有任何ID或名称。因此,请使用Web元素参数进行切换。

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

切换到内部框架:

内部iframe ID = 迪士尼iframe

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

要切换框外或切换到默认内容,请使用以下内容。

driver.switchTo().defaultContent();

答案 1 :(得分:0)

尝试一下

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();

答案 2 :(得分:0)

根据网址https://www.starwars.com/调用元素上的click(),文字为通过电子邮件注册,您需要:

  • 诱导WebDriverWait等待文本为 SIGNUP 的元素可以点击。
  • 促使WebDriverWait使父级 iframe可用并切换到它。
  • 促使WebDriverWait使 iframe可用并切换到它
  • 针对文本为使用电子邮件注册的元素,诱导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