通过使用site-prism gem进行集成测试,我可以通过引用id或title或link或xpath来查找页面元素,还是只能通过css进行搜索
我从一年开始使用黄瓜,而且几周之后我就在它中添加了page-object-gem.当我执行测试时,我收到消息:
DEPRECATION WARNING
您正在commentPage.rb中调用一个名为checkbox的方法:23:在`delete in delete_comment'中.
此方法在页面对象中不存在,因此它将传递给驱动程序.
此功能将在不久的将来删除.
请更改您的代码以调用正确的页面对象方法.
(我对其他案例也有同样的看法,但这个"琐碎"的例子应该更容易解释)
我试图避免这种情况,但这看起来很复杂.
对于测试,我正在检查一个页面,其中有一个表格.每行显示一行,我需要检查特定行的复选框.
我在pageObject中的代码:
table(:comment_list, :class => 'comments')
button(:delete, :text => "Delete")
def delete_comment (text)
self.comment_list_element.each do |row|
if row.text.include? "#{text}"
row.checkbox.set
self.delete
return true
end
end
false
end
Run Code Online (Sandbox Code Playgroud)
我是否需要对我的桌子进行预处理以在测试期间使用它?
页面对象是基于硒的测试中最受欢迎的模式之一。不幸的是,如果我们照原样使用它,我们经常需要复制代码。请考虑以下情况:
是否存在任何现有的基础结构来创建更细粒度的组件对象,而不是硒中或第三方中的页面对象?我的意思是注释和相关的基础架构?
我正在使用量角器,并创建了一个页面对象。
这是我的页面对象:
'use strict';
var CreateAgent = function () {
this.agentEmail = element(by.model('agent.email'));
this.janrainConsoleAgent = by.xpath(".//*[@value='ccp_agent']");
this.janrainConsoleAgentManager = by.xpath(".//* .[@value='ccp_agent_manager']");
this.saveButton = by.className('md-primary md-raised md-button md-ink-ripple');
this.addEmail = function(email){
this.agentEmail.sendKeys(email);
};
this.selectRole = function(role){
switch(role){
case 'ccp agent':
this.janrainConsoleAgent.click();
case 'ccp agent manager':
this.janrainConsoleAgentManager.click();
default:
break;
}
};
this.saveAgent = function(){
this.saveButton.click();
};
};
module.exports = CreateAgent;
Run Code Online (Sandbox Code Playgroud)
该函数正在调用规范
规格如下:
var createAgent = require('../page/create_agent_page');
describe('Protractor Demo Janrain - Create Agent', function(){
it('should fill out information to create agent', function(){
createAgent.addEmail('jburquez+auto001@janrain.com');
browser.sleep(3000); …
Run Code Online (Sandbox Code Playgroud) 我在youtube上观看了一个视频,建议使用剧本模式作为使用常用页面对象的替代方案.我看到的唯一优势是页面对象类没有那么大.还有其他我想念的东西吗?我一直在搜索,所有网站都在使用serenity bdd参考youtube讲座中的示例.有人可以解释为什么它比使用页面对象更好(或者更糟)?
一个不使用宁静bdd的例子真的很有帮助.
我正在使用 Selenium v3.6.0 和 .NET Core 2.0,以下代码在 PageFactory.InitElements 上给我一个错误,说它在当前上下文中不存在。
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
namespace Example
{
public class Form
{
[FindsBy(How = How.Name, Using = "Filter")] // This does exist in current context using .NET Core
public IWebElement Filter { get; set; }
[FindsBy(How = How.TagName, Using = "Button")]
public IWebElement Button;
public Form(IWebDriver driver)
{
PageFactory.InitElements(driver, this); // This doesn't exist in current context using .NET Core
}
}
}
Run Code Online (Sandbox Code Playgroud)
我对此有点困惑,因为属性 FindsBy、FindsByAll 和 FindsBySequence 在OpenQa.Selenium.Support.PageObjects
命名空间中都可用,但 PageFactory 不是。据我所知,这些属性仅适用于 …
例如:
Scenario:
Given the pageOne page
When I get pageOneTitle
And click the first menu item
And I get the pageTwoTitle
Then pageOneTitle is not equals pageTwoTitle
Run Code Online (Sandbox Code Playgroud)
我有两个课程.每页一个.
该场景的前三个步骤在PageOneSteps中,另一个在PageTwoSteps中.这意味着,pageTitleOne保存在PageOneSteps中.验证步骤然后pageOneTitle不等于PageTwoStele中的pageTwoTitle.
如果PageOneSteps中的pageOneTitle,我如何在PageTwoSteps中等于pageOneTitle和pageTwoTitle?
这是一个非常简单的例子.但我希望它能说明我的意思.
感谢您的支持!
我正在遵循页面对象模型来自动化一个应用程序中的流程。在其中一个模块中,我必须声明页面标题和更多消息。到目前为止,我将我的断言代码放在 PageFactory 本身中,如下所示:
public class EditPost {
WebDriver driver;
public EditPost(WebDriver editPostDriver)
{
this.driver=editPostDriver;
}
@FindBy(how=How.XPATH,using="//*[@id='message']/p")
WebElement post_published;
public void assert_message()
{
String actual_message_title=post_published.getText();
Assert.assertEquals(actual_message_title, "Post published. View post");
System.out.println("Message: Post published, Successfully Verified");
}
}
Run Code Online (Sandbox Code Playgroud)
我正在从实现 TestNG 的主文件中调用 assert 方法,如下所示:
@Test (priority=5)
public void assert_message()
{
//Created Page Object using Page Factory
EditPost edit_post = PageFactory.initElements(driver, EditPost.class);
edit_post.assert_message();
}
Run Code Online (Sandbox Code Playgroud)
目前,我正在通过 3 个包运行执行。浏览器工厂的“Helper”包,PageFactories 的“Pages”包和测试用例的“Testcase”包。
我的目标是向前迈进,我想重用为所有不同实用程序编写的代码。
我的问题是:
根据 PageFactory & Page Object Model 的概念,我的方法是否正确?或者我是否需要将断言移动到“Helper”包?或者我应该为断言创建一个单独的库/包?(在接下来的日子里,我可能需要在一个页面上执行多个断言)
在下一个冲刺中,我可能需要做一些其他的活动,比如对所有/失败的测试用例进行屏幕截图。那么我如何保持我的设计结构和组织,以便我可以以最佳方式重用代码/库/利用它们?
我试图找出按钮元素是否可点击,我无法使用 selenium webdriver 成功验证。
这是我验证元素是否可点击的代码
boolean installAFile;
String classValues = driver.findElement(by.XPATH("//button[contains(., 'Install a new file')]")).getAttribute("class");
installAFIle = classValues.contains("iconbutton-button--clickable");
return installAFIle;
Run Code Online (Sandbox Code Playgroud)
这是 HTML
<div>
<!-- react-text: 406 -->
test message 1
<!-- /react-text -->
<div class="iconbutton">
<button class="iconbutton-button iconbutton-button--clickable" type="button"
tabindex="0">
<div class="iconbutton-button-label">Install a new file</div>
</button>
</div>
<!-- react-text: 410 -->
under File > Install.
<!-- /react-text -->
</div>
Run Code Online (Sandbox Code Playgroud)
我不断收到以下验证消息: 没有这样的元素:无法定位元素:{"method":"xpath","selector":"//button[contains(., 'Install a new file')]"}
通过阅读SeleniumHQ的pageobject文档,他们指定了从不导航到其他页面的方法返回“ this”的示例。我的问题是为什么?
我以为页面对象的状态可能是一个原因,但是页面本身(实际的UI页面)可能会更改状态或刷新,但页面对象本身不会。Page Factory及其@FindBy批注已经确保了每次调用WebElement时都会找到它,因此在这种情况下元素的状态似乎无关紧要。
pageobjects ×10
selenium ×7
java ×3
cucumber ×2
.net-core ×1
automation ×1
c# ×1
capybara ×1
javascript ×1
jbehave ×1
page-factory ×1
protractor ×1
ruby ×1
serenity-bdd ×1
site-prism ×1
watir ×1
webdriver ×1