我想单击“使用电子邮件注册”按钮。当我点击https://www.starwars.com/上的“注册”链接时。您能帮忙吗?
我写了下面的代码。它不会引发任何错误,但不会单击“使用电子邮件注册”按钮。
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.");
}
答案 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()
,文字为通过电子邮件注册,您需要:
您可以使用以下解决方案。
代码块:
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()
浏览器快照: