第一次海报.我已经在UI自动化领域工作了很多年,但最近才引入/指示使用Page Object Model.其中大部分是常识,包括我已经使用的技术,但有一个特别好的点我无法在自己的脑海中证明,尽管广泛搜索了一个合理的解释.我希望这里有人可以启发我,因为这个问题引起了一些惊愕,因为我试图将POM与我自己的最佳实践相结合.
来自http://code.google.com/p/selenium/wiki/PageObjects:
上面给出的代码显示了一个重要的观点:测试而不是PageObjects应该负责对页面状态进行断言....当然,正如每个指南都有例外......
来自http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference:
在如何设计页面对象方面有很多灵活性,但是有一些基本规则可以获得测试代码所需的可维护性.页面对象本身永远不应该进行验证或断言.这是测试的一部分,应该始终在测试代码中,而不是在页面对象中.页面对象将包含页面的表示形式,以及页面通过方法提供的服务,但是没有与正在测试的内容相关的代码应该在页面对象中.
有一个单一的验证可以而且应该在页面对象中,即验证页面以及页面上可能的关键元素是否已正确加载.应在实例化页面对象时完成此验证.
这两个"指南"都允许潜在的例外,但我对基本前提不能不同意.我习惯于在"页面方法"中进行大量的验证,我认为验证的存在是一种强大的技术,可以在各种环境中查找问题(即每次调用方法时都会进行验证)而不仅仅发生在特定测试的有限环境中.
例如,让我们想象一下,当您登录AUT时,会出现一些文本"以USER身份登录".有一个测试专门验证这个是合适的,但为什么不想在每次调用登录时验证它?这个工件与页面"是否正确加载"没有直接关系,并且它与"正在测试的内容"无关,因此根据上面的POM指南,它显然不应该是页面方法. ..但在我看来,它显然应该存在,通过尽可能经常地验证重要的工件来最大化自动化的力量,尽可能少的事先考虑.将验证码放入页面方法可以增加自动化的功能,允许您"免费"获得大量验证,而不必在测试中担心,并且在不同的环境中进行频繁验证通常会发现您不会发现的问题如果验证仅限于对该工件的单个测试.
换句话说,我倾向于区分特定于测试的验证和"一般"验证,并且我认为后者被广泛地包含在页面方法中是完全合适/可取的.这促进了更薄的测试和更厚的页面对象,这通常通过重用更多代码来提高测试可维护性 - 尽管这些指南中存在相反的争用.我错过了这一点吗?不希望在页面方法中进行验证的真正原理是什么?我所描述的情况实际上是这些指南中描述的"例外"之一,因此实际上与POM不一致吗?提前感谢您的想法.-jn-
我在Selenium 2 Web驱动程序测试中有以下代码,它在我调试时有效,但是当我在构建中运行它时大部分时间都失败了.我知道它必须与页面没有刷新的方式有关,但不知道如何解决它所以任何关于我做错了什么的指针都很感激.我使用JSF primefaces作为我的Web应用程序框架.当我点击添加新链接时,会出现一个弹出对话框,其中包含一个我可以输入日期的输入框,然后单击保存.它是在输入元素输入文本,我得到一个陈旧的元素引用异常.
提前致谢
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class EnterActiveSubmissionIntegrationTest {
Map<String, Map<String, String>> tableData = new HashMap<String, Map<String, String>>();
@Test
public void testEnterActiveSubmission() throws Exception {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
System.setProperty("webdriver.chrome.driver", "C:/apps/chromedriver.exe");
WebDriver driver = …Run Code Online (Sandbox Code Playgroud) 我现在已经研究了好几个小时,但我只发现了大局.他们在任何地方都假设读者已经建立了系统的一部分.
我认为将整个事物放在一起所需的部件的大图描述将是有用的.
他们都说"使用你的maven selenium测试"等等.
编辑:经过一些研究,我发现我需要在Jenkins和我的计算机上安装Maven,为Eclipse安装maven插件,并创建/转换我的项目作为Maven项目.如何在Jenkins中转移我的Maven项目?我是否导出到.jar,还是在服务器上移动整个文件夹?如何将整个事物与xvfb连接在一起?
所以这就是我目前所知道的
我目前有很多情况需要验证页面(及其所有元素)是否正确显示.isDisplayed()WebElement 的方法似乎是一种逻辑方式,但我想准确理解这个方法正在做什么来确定元素是否"显示".所述的Javadoc在网络上似乎是稀疏充其量不棚上的方法和其它信息的内部运作任何光.
如果有人能提供这种方法如何运作的详细描述,我将非常感激.
我可以看到,自从selenium 2.0,WebDriver和Selenium RC被打包在一起下载.现在我主要使用WebDriver,但是我可以从现在开始在我的测试脚本中引入Selenium RC吗?有没有Selenium RC能够做到但WebDriver没有,反之亦然?
当我在像FirefoxDriver这样的webdriver中使用代理时,如果代理不好,那么get方法将永远阻止.我设置了一些超时参数,但这没有用.
这是我的代码:
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("general.useragent.override", ua);
Proxy p = new Proxy();
p.setHttpProxy(proxy);
profile.setProxyPreferences(p);
profile.setEnableNativeEvents(true);
// create a driver
WebDriver driver = new FirefoxDriver(profile);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
driver.get("www.sina.com.cn")
Run Code Online (Sandbox Code Playgroud)
对driver.get的调用将永远阻塞,但我希望它等待30秒,如果页面未加载则抛出异常.
我在Eclipse IDE中执行Web驱动程序脚本时无法执行dex:Java堆空间Java堆空间错误.我已经使用Android SDK和AVD Manager配置了Eclipse IDE.
我还增加了-Xms200m到-Xmx512m,但没有奏效.
任何人都可以给我发送示例代码如何验证元素
在Selenium WebDrvier中使用Java
我需要检查一个页面对象集合,看看每个页面对象是否在其WebDriver上调用了quit().
我编写了以下方法来检查WebDriver的状态:
public static boolean hasQuit(WebDriver driver) {
try {
driver.getTitle();
return false;
} catch (SessionNotFoundException e) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这是问题:我不喜欢抛出并捕获异常以发现布尔值的真实性,但似乎我没有选择,因为WebDriver API没有提供检查驱动程序是否已退出的方法.
所以我的问题是,是否有更好的方法来检查WebDriver是否已退出?
我在这里找到了一个类似的(也是更一般的)问题,但问题没有任何已经尝试过的代码,唯一的答案是在退出后总是将WebDriver设置为null(我不一定能控制) .
我正在尝试编写一个脚本来检查网站.这是我第一次使用硒.我正在尝试在OSX系统上运行脚本.虽然我检查了/Library/Python/2.7/site-packages并且selenium-2.46.0-py2.7.egg存在,但是当我运行脚本时它一直告诉我没有要导入的selenium模块.
这是我运行代码时得到的日志:
Run Code Online (Sandbox Code Playgroud)Traceback (most recent call last): File "/Users/GiulioColleluori/Desktop/Class_Checker.py", line 10, in <module> from selenium import webdriver ImportError: No module named 'selenium'
如果你能告诉我你是否知道什么可能导致这个问题值得高度赞赏.
谢谢.