Make WebDriver::getLocator (and WebDriver::getStrictLocator) public
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 45/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 停滞
- 技术栈
- php
- 领域
- testing-qa
调研方向
从 WebDriver::getLocator 和 WebDriver::getStrictLocator 入口点开始,检查 WebDriver::findElements 等公共函数如何接收 WebDriverBy 参数。验证通过 $this->getModule('WebDriver') 获取的模块能否从自定义操作中使用两个定位器服务,并确认无效选择器的处理仍由 issue 中展示的现有行为覆盖。
由索引模型根据 Issue 内容生成。
描述
What are you trying to achieve?
Write a custom action that uses the WebDriver locator service to locate an element by its selector string.
I would like to do this by getting the web driver module with $this->getModule('WebDriver') rather than extending WebDriver to keep my testing architecture consistent with other modules I've written.
What do you get instead?
Unable to use the functions because they're protected.
/**
* @param $selector
* @return WebDriverBy
* @throws \InvalidArgumentException
*/
protected function getLocator($selector)
{
if ($selector instanceof WebDriverBy) {
return $selector;
}
if (is_array($selector)) {
return $this->getStrictLocator($selector);
}
if (Locator::isID($selector)) {
return WebDriverBy::id(substr($selector, 1));
}
if (Locator::isCSS($selector)) {
return WebDriverBy::cssSelector($selector);
}
if (Locator::isXPath($selector)) {
return WebDriverBy::xpath($selector);
}
throw new \InvalidArgumentException("Only CSS or XPath allowed");
}
// ...and
/**
* @param array $by
* @return WebDriverBy
*/
protected function getStrictLocator(array $by)
{
$type = key($by);
$locator = $by[$type];
switch ($type) {
case 'id':
return WebDriverBy::id($locator);
case 'name':
return WebDriverBy::name($locator);
case 'css':
return WebDriverBy::cssSelector($locator);
case 'xpath':
return WebDriverBy::xpath($locator);
case 'link':
return WebDriverBy::linkText($locator);
case 'class':
return WebDriverBy::className($locator);
default:
throw new MalformedLocatorException(
"$by => $locator",
"Strict locator can be either xpath, css, id, link, class, name: "
);
}
}
Details
It seems to me that these are services that the WebDriver module should expose, as some public WebDriver functions take WebDriverBy arguments (e.g. WebDriver::findElements). We need some service to get these WebDriverBy arguments, or we won't be able to use the public function calls that are exposed through $this->getModule('WebDriver');. Alternatively, maybe the WebDriver module should expose some public findElement type of function that takes a selector string rather than a WebDriverBy instance.
- Codeception version: 2.2.10
- PHP Version: 7.0.10
Apologies if this has already been discussed, I didn't see it on the issues board. And thanks for making such a fantastic tool!
- 主要语言
- PHP
- 星标
- 39
- 派生
- 25
- PR 合并指标
- 30 天内没有已合并 PR
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Codeception/module-webdriver 的其他 Issue
-
难度 5/5 一周以上 新手友好度 35/100
Codeception/module-webdriver#151 · 1 条评论 ·
-
难度 4/5 3-5 天 新手友好度 25/100
Codeception/module-webdriver#135 ·
-
难度 2/5 1-3 小时 新手友好度 38/100
Codeception/module-webdriver#130 ·
-
难度 3/5 1-2 天 新手友好度 35/100
Codeception/module-webdriver#128 ·
-
难度 2/5 1-3 小时 新手友好度 45/100
Codeception/module-webdriver#126 ·
查看 Codeception/module-webdriver 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 1/5 1 小时以内 新手友好度 85/100
-
难度 2/5 1-3 小时 新手友好度 75/100
hector-jewell/food-delivery-system-for-restaurant-using-php#1311 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
Sylius/SyliusGridBundle#501 ·