51Testing软件测试论坛

标题: Day5-6测试积点任务 [打印本页]

作者: 测试积点老人    时间: 2018-5-24 15:39
标题: Day5-6测试积点任务
问题:
点击事件后。如何等待下一个 page 加载完成?或者等待某几个元素种出现其中一个?
比方说点击登录按钮后。因为服务器验证登录和网络延迟需要等待一段事件后判断是否登录
成功?或者是其他状态。比如出现验证码。或者其他提示操作之类的。


我如何判断出现的是什么提示?并且做后续操作?


已经用
CalculatorSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2)); 延
迟2秒。
但是我后续用
CalculatorSession.FindElementByName("确定").Click();


if( CalculatorSession.PageSource.Contains("登录成功"))
CalculatorSession.FindElementByName("登录成功").Click();


这样的方法感觉在执行 if( CalculatorSession.PageSource.Contains("登录成功"))的时候并
没有延迟。而是直接非false了。。
当然这里只是一个例子。出现的可能会是登录成功。密码错误。需要验证码。错误过多。账
号被精等等其他内容。我需要逐一处理。。当然由于网络延迟的不确定性。所以不希望直接
steep


PS。也无法通过判断一个textbox中的文字来判断状态。因为可能每种状态返回的page不一样。


作者: 梦想家    时间: 2018-5-25 09:48
ava实现
写一个类,继承FluentWait,例如:
public class AppiumDriverWait extends FluentWait
构造方法:
public AppiumDriverWait(AppiumDriver driver, long timeOutInSeconds) {
this(driver, new SystemClock(), Sleeper.SYSTEM_SLEEPER, timeOutInSeconds, DEFAULT_SLEEP_TIMEOUT);
}
然后在类里面用内部类ExpectedCondition,实现apply方法查找元素
public static WebElement findAndWait(AppiumDriver driver, final By by, long timeout) {
WebElement ele = new AppiumDriverWait(driver, timeout)
.until(new ExpectedCondition() {
public WebElement apply(AppiumDriver d) {
return d.findElement(by);
}
});
return textView;
}
最后在你的脚本里面用如下语句查找页面元素
AppiumDriverWait.findAndWait(driver, By.xpath("xpath"), 60L);
60秒内找到就返回webelement,找不到就报RuntimeException。

不过这是比较老的方法了,据说现在selenium最新jar包是java8平台上的了,java8支持函数闭包,应该会有更简洁的方法实现此功能。没用过java8,也没用过selenium3.0纯猜测。
作者: 梦想家    时间: 2018-5-25 09:48
临时解决办法是登录后直接steep 60秒。然后看PageSource种包含的内容来判断。但是这样每次操作也需要60秒。。
作者: abcsell    时间: 2018-5-25 09:55
增加判定条件
作者: qqq911    时间: 2018-5-25 10:16
增加判定条件

作者: jingzizx    时间: 2018-5-25 10:57
添加判断
作者: 海海豚    时间: 2018-5-25 13:38
增加判定条件




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2