【发布时间】:2021-03-13 09:06:59
【问题描述】:
我尝试从页面 https://temp-mail.org/ 获取值(电子邮件地址),并将其放入字符串中。
所以我的代码是这样的:
maven 依赖:
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<scope>test</scope>
</dependency>
</dependencies>
我创建摘要页面
public abstract class AbstractPage {
protected WebDriver driver;
protected AbstractPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
protected abstract AbstractPage openPage(String url);
}
临时邮件页面:
public class TempMailOrgPage extends AbstractPage {
String regex = "^[A-Za-z0-9+_.-]+@(.+)$";
Pattern pattern = Pattern.compile(regex);
public TempMailOrgPage(WebDriver driver) {
super(driver);
}
public TempMailOrgPage openPage(String url) {
driver.get(url);
driver.manage().window().maximize();
return this;
}
@FindBy(xpath = "//input[@id='mail']")
WebElement mailField;
public TempMailOrgPage getAddress() {
//new WebDriverWait(driver, 10).until(ExpectedConditions.textToBePresentInElement(mailField, regex));
new WebDriverWait(driver, 10).until(ExpectedConditions.textMatches((By) mailField, pattern));
System.out.println(mailField.getAttribute("value"));
return this;
}
}
和测试
public class MainTest {
WebDriver driver;
@BeforeMethod(alwaysRun = true)
public void browserRun() {
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
}
@Test(description = "try get addresb")
public void scenarioWithCopyingEmail() {
new TempMailOrgPage(this.driver)
.openPage("https://temp-mail.org/")
.getAddress();
}
@AfterMethod(alwaysRun = true)
public void afterTestCompleted() {
driver.quit();
driver = null;
}
}
在测试运行后我得到错误。我了解等待生成电子邮件地址时出错。
而不是单词“加载”将是邮件地址。在这一行中,我尝试使用模式:
new WebDriverWait(driver, 10).until(ExpectedConditions.textMatches((By) mailField, pattern));
等待我做错了什么?
附:使用 thread.sleep 不是一种方式。
【问题讨论】:
-
mailField 表示据我所知没有任何属性值的输入字段。不确定您是否正在寻找数据值
-
为什么类
TempMailOrgPage中的方法openPage()什么都不做?不应该用driver.get()打开网址吗? -
@Fenio :它会执行“this.driver = driver; PageFactory.initElements(driver, this);”。看到有这个和超级参与。
-
@cruisepandey 不,这就是构造函数的作用。我在问
openPage()方法,它只返回对当前对象的引用......实际打开 temp-mail.org 的代码行在哪里? -
@Fenio :是的,我同意,代码中缺少 driver.get("")。