diff --git a/README.md b/README.md
index bc3caed3..24b2b58e 100755
--- a/README.md
+++ b/README.md
@@ -217,8 +217,9 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
- def test_basic(self):
- self.open("https://store.xkcd.com/search")
+ def test_basics(self):
+ url = "https://store.xkcd.com/collections/posters"
+ self.open(url)
self.type('input[name="q"]', "xkcd book")
self.click('input[value="Search"]')
self.assert_text("xkcd: volume 0", "h3")
@@ -228,10 +229,8 @@ class MyTestClass(BaseCase):
self.click('a[rel="license"]')
self.assert_text("free to copy and reuse")
self.go_back()
- self.click_link_text("About")
+ self.click_link("About")
self.assert_exact_text("xkcd.com", "h2")
- self.click_link_text("geohashing")
- self.assert_element("#comic img")
```
* By default, **[CSS Selectors](https://www.w3schools.com/cssref/css_selectors.asp)** are used for finding page elements.
diff --git a/examples/basic_test.py b/examples/basic_test.py
index 78509684..8ced79ac 100755
--- a/examples/basic_test.py
+++ b/examples/basic_test.py
@@ -3,13 +3,13 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
- def test_basic(self):
+ def test_basics(self):
self.open("https://store.xkcd.com/search")
self.type('input[name="q"]', "xkcd book\n")
self.assert_text("xkcd book", "div.results")
self.open("https://xkcd.com/353/")
self.click('a[rel="license"]')
self.go_back()
- self.click_link_text("About")
- self.click_link_text("comic #249")
+ self.click_link("About")
+ self.click_link("comic #249")
self.assert_element('img[alt*="Chess"]')
diff --git a/examples/capabilities/ReadMe.md b/examples/capabilities/ReadMe.md
index c0ca822c..ba7416c0 100755
--- a/examples/capabilities/ReadMe.md
+++ b/examples/capabilities/ReadMe.md
@@ -76,7 +76,7 @@ If you pass ``"*"`` into the ``"name"`` field of ``--cap-string``, the name will
```bash
pytest test_swag_labs.py --cap-string='{"browserName":"chrome","name":"*"}' --server="127.0.0.1" --browser=chrome
```
-Example name: ``"my_first_test.MyTestClass.test_basic"``
+Example name: ``"my_first_test.MyTestClass.test_basics"``
### Using a local Selenium Grid
diff --git a/examples/my_first_test.py b/examples/my_first_test.py
index 901c50e7..e2939f56 100755
--- a/examples/my_first_test.py
+++ b/examples/my_first_test.py
@@ -3,8 +3,9 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
- def test_basic(self):
- self.open("https://store.xkcd.com/search")
+ def test_basics(self):
+ url = "https://store.xkcd.com/collections/posters"
+ self.open(url)
self.type('input[name="q"]', "xkcd book")
self.click('input[value="Search"]')
self.assert_text("xkcd: volume 0", "h3")
@@ -14,10 +15,8 @@ class MyTestClass(BaseCase):
self.click('a[rel="license"]')
self.assert_text("free to copy and reuse")
self.go_back()
- self.click_link_text("About")
+ self.click_link("About")
self.assert_exact_text("xkcd.com", "h2")
- self.click_link_text("geohashing")
- self.assert_element("#comic img")
####
@@ -77,8 +76,8 @@ class MyTestClass(BaseCase):
# self.assert_text() = self.assert_text_visible()
# self.find_text() = self.wait_for_text_visible()
# = self.wait_for_text()
- # self.click_link_text(text) = self.click(link=text)
- # = self.click_link(text)
+ # self.click_link(text) = self.click(link=text)
+ # = self.click_link_text(text)
# * self.get(url) is SPECIAL: *
# If {url} is a valid URL, self.get() works just like self.open()
# Otherwise {url} becomes a selector for calling self.get_element()
diff --git a/examples/offline_examples/test_demo_page.py b/examples/offline_examples/test_demo_page.py
index ea649e93..7faf5074 100755
--- a/examples/offline_examples/test_demo_page.py
+++ b/examples/offline_examples/test_demo_page.py
@@ -89,7 +89,7 @@ class OfflineTestClass(BaseCase):
self.assert_true(self.is_selected(".fBox"))
self.switch_to_default_content()
- # Assert link text - Use click_link_text() to click
+ # Assert link text - Use click_link() to click
self.assert_link_text("seleniumbase.com")
self.assert_link_text("SeleniumBase on GitHub")
self.assert_link_text("seleniumbase.io")
diff --git a/examples/presenter/ReadMe.md b/examples/presenter/ReadMe.md
index 5ef11247..edfa0bad 100755
--- a/examples/presenter/ReadMe.md
+++ b/examples/presenter/ReadMe.md
@@ -158,7 +158,7 @@ class MyPresenterClass(BaseCase):
code=(
'from seleniumbase import BaseCase\n\n'
'class MyTestClass(BaseCase):\n\n'
- ' def test_basic(self):\n'
+ ' def test_basics(self):\n'
' self.open("https://store.xkcd.com/search")\n'
' self.type(\'input[name="q"]\', "xkcd book\\n")\n'
' self.assert_text("xkcd: volume 0", "h3")\n'
@@ -168,14 +168,14 @@ class MyPresenterClass(BaseCase):
' self.click(\'a[rel="license"]\')\n'
' self.assert_text("free to copy and reuse")\n'
' self.go_back()\n'
- ' self.click_link_text("About")\n'
+ ' self.click_link("About")\n'
' self.assert_exact_text("xkcd.com", "h2")'))
self.add_slide(
"
Highlight code in slides:
",
code=(
'from seleniumbase import BaseCase\n\n'
'class MyTestClass(BaseCase):\n\n'
- ' def test_basic(self):\n'
+ ' def test_basics(self):\n'
' self.open("https://store.xkcd.com/search")\n'
' self.type(\'input[name="q"]\', "xkcd book\\n")\n'
' self.assert_text("xkcd: volume 0", "h3")'))
diff --git a/examples/presenter/core_presentation.py b/examples/presenter/core_presentation.py
index c435110e..36875be6 100644
--- a/examples/presenter/core_presentation.py
+++ b/examples/presenter/core_presentation.py
@@ -16,15 +16,15 @@ class MyChartMakerClass(BaseCase):
code=(
'from seleniumbase import BaseCase\n\n'
'class MyTestClass(BaseCase):\n\n'
- ' def test_basic(self):\n'
+ ' def test_basics(self):\n'
' self.open("https://store.xkcd.com/search")\n'
' self.type(\'input[name="q"]\', "xkcd book\\n")\n'
' self.assert_text("xkcd book", "div.results")\n'
' self.open("https://xkcd.com/353/")\n'
' self.click(\'a[rel="license"]\')\n'
' self.go_back()\n'
- ' self.click_link_text("About")\n'
- ' self.click_link_text("comic #249")\n'
+ ' self.click_link("About")\n'
+ ' self.click_link("comic #249")\n'
' self.assert_element(\'img[alt*="Chess"]\')\n'))
self.add_slide(
"Command-line options. Examples:
",
diff --git a/examples/presenter/my_presentation.py b/examples/presenter/my_presentation.py
index fc575fb2..78872ad6 100755
--- a/examples/presenter/my_presentation.py
+++ b/examples/presenter/my_presentation.py
@@ -45,7 +45,7 @@ class MyPresenterClass(BaseCase):
code=(
'from seleniumbase import BaseCase\n\n'
'class MyTestClass(BaseCase):\n\n'
- ' def test_basic(self):\n'
+ ' def test_basics(self):\n'
' self.open("https://store.xkcd.com/search")\n'
' self.type(\'input[name="q"]\', "xkcd book\\n")\n'
' self.assert_text("xkcd: volume 0", "h3")\n'
@@ -55,14 +55,14 @@ class MyPresenterClass(BaseCase):
' self.click(\'a[rel="license"]\')\n'
' self.assert_text("free to copy and reuse")\n'
' self.go_back()\n'
- ' self.click_link_text("About")\n'
+ ' self.click_link("About")\n'
' self.assert_exact_text("xkcd.com", "h2")'))
self.add_slide(
"Highlight code in slides:
",
code=(
'from seleniumbase import BaseCase\n\n'
'class MyTestClass(BaseCase):\n\n'
- ' def test_basic(self):\n'
+ ' def test_basics(self):\n'
' self.open("https://store.xkcd.com/search")\n'
' self.type(\'input[name="q"]\', "xkcd book\\n")\n'
' self.assert_text("xkcd: volume 0", "h3")'))
diff --git a/examples/raw_parameter_script.py b/examples/raw_parameter_script.py
index efeb2e1e..c9893947 100755
--- a/examples/raw_parameter_script.py
+++ b/examples/raw_parameter_script.py
@@ -25,7 +25,7 @@ except (ImportError, ValueError):
# Example run command: "python raw_parameter_script.py"
from my_first_test import MyTestClass # (relative imports DON'T work)
- sb = MyTestClass("test_basic")
+ sb = MyTestClass("test_basics")
sb.browser = "chrome"
sb.headless = False
sb.headed = False
@@ -86,7 +86,7 @@ except (ImportError, ValueError):
sb.setUp()
try:
- sb.test_basic()
+ sb.test_basics()
finally:
sb.tearDown()
del sb
diff --git a/examples/test_demo_site.py b/examples/test_demo_site.py
index e7a9eddd..662ab537 100755
--- a/examples/test_demo_site.py
+++ b/examples/test_demo_site.py
@@ -89,7 +89,7 @@ class MyTestClass(BaseCase):
self.assert_link_text("seleniumbase.io")
# Click link text
- self.click_link_text("SeleniumBase Demo Page")
+ self.click_link("SeleniumBase Demo Page")
# Assert exact text
self.assert_exact_text("Demo Page", "h1")
diff --git a/examples/tour_examples/bootstrap_xkcd_tour.py b/examples/tour_examples/bootstrap_xkcd_tour.py
index a8a40e64..24f4b141 100755
--- a/examples/tour_examples/bootstrap_xkcd_tour.py
+++ b/examples/tour_examples/bootstrap_xkcd_tour.py
@@ -3,7 +3,7 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
- def test_basic(self):
+ def test_bootstrap_tour(self):
self.open('https://xkcd.com/1117/')
self.assert_element('img[alt="My Sky"]')
self.create_bootstrap_tour()
diff --git a/examples/translations/english_test_1.py b/examples/translations/english_test_1.py
index e532acd0..191eabc5 100755
--- a/examples/translations/english_test_1.py
+++ b/examples/translations/english_test_1.py
@@ -17,5 +17,5 @@ class MyTestClass(BaseCase):
self.click('a[rel="license"]')
self.assert_text("back to this page")
self.go_back()
- self.click_link_text("About")
+ self.click_link("About")
self.assert_exact_text("xkcd.com", "h2")
diff --git a/help_docs/chinese.md b/help_docs/chinese.md
index 88c902e0..f5940fd8 100644
--- a/help_docs/chinese.md
+++ b/help_docs/chinese.md
@@ -81,9 +81,11 @@ pip install seleniumbase
下载 webdriver:
SeleniumBase 下载 webdriver 驱动到 [seleniumbase/drivers](https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/drivers) 文件夹下, 使用 ``install`` 命令:
+
```bash
seleniumbase install chromedriver
```
+
* 你可能需要不同的 webdriver 来对应各种网页浏览器来完成自动化测试,例如: ``chromedriver`` 对应 Chrome, ``edgedriver`` 对应 Edge, ``geckodriver`` 对应 Firefox, ``operadriver`` 对应 Opera, ``iedriver`` 对应 Internet Explorer.
* 如果你需要安装最新版本的浏览器驱动, 以以下命令获取最新版本浏览器驱动 (因兼容性原因,默认下载的版本为 chromedriver 2.44 ):
```bash
@@ -96,6 +98,7 @@ seleniumbase install chromedriver latest
cd examples/
pytest my_first_test.py
```
+
* 如果没指定版本则默认运行的浏览器驱动为 chromedriver, 使用指定版本的命令为: ``--browser=BROWSER``.
* Linux 中 ``--headless`` 为默认值 (无界面运行).你也可以在任何系统中运行无界面模式. 如果你的 Linux服务器有 GUI 界面,你也需要在界面中查看浏览器运行用例的过程,你可以添加 ``--headed`` 或 ``--gui``.
@@ -114,18 +117,19 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
- def test_basic(self):
+ def test_basics(self):
+ self.open("https://store.xkcd.com/search")
+ self.type('input[name="q"]', "xkcd book")
+ self.click('input[value="Search"]')
+ self.assert_text("xkcd: volume 0", "h3")
self.open("https://xkcd.com/353/")
self.assert_title("xkcd: Python")
self.assert_element('img[alt="Python"]')
self.click('a[rel="license"]')
self.assert_text("free to copy and reuse")
self.go_back()
- self.click("link=About")
- self.assert_text("xkcd.com", "h2")
- self.open("://store.xkcd.com/collections/everything")
- self.type("input.search-input", "xkcd book\n")
- self.assert_exact_text("xkcd: volume 0", "h3")
+ self.click_link("About")
+ self.assert_exact_text("xkcd.com", "h2")
```
* 默认情况下, **[CSS Selectors](https://www.w3schools.com/cssref/css_selectors.asp)** 用来查找页面元素.
@@ -158,6 +162,7 @@ self.save_screenshot(FILE_NAME) # 保存当前页面的截图
```
[chinese_test_1.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/translations/chinese_test_1.py):
+
```python
from seleniumbase.translate.chinese import 硒测试用例
@@ -311,6 +316,7 @@ pytest --collect-only -q
您可以在脚本中使用以下内容来帮助您调试问题:
(如果使用ipdb,请确保将“-s”添加到命令行选项中,除非已经在pytest.ini中)
+
```python
import time; time.sleep(5) # Makes the test wait and do nothing for 5 seconds.
import ipdb; ipdb.set_trace() # Enter debugging mode. n = next, c = continue, s = step.
@@ -580,6 +586,7 @@ self.type(selector, text) # 用指定的值更新来自指定元素的文本。
```python
self.type("input#id_value", "2012")
```
+
您也可以使用self.add_text()或WebDriver .send_keys()命令,但是如果文本框中已经有文本,这些命令不会首先清除文本框
如果您想键入特殊的键,这也很容易。这里有一个例子:
@@ -605,6 +612,7 @@ attribute = self.get_attribute("#comic img", "title")
```python
self.wait_for_element_present("div.my_class", timeout=10)
```
+
(注意: 您也可以使用: ``self.assert_element_present(ELEMENT)``)
在数秒内断言页面上元素的可见性:
@@ -612,6 +620,7 @@ self.wait_for_element_present("div.my_class", timeout=10)
```python
self.wait_for_element_visible("a.my_class", timeout=5)
```
+
(注意: 这个的简单版本是 ``self.find_element(ELEMENT)`` 和 ``self.assert_element(ELEMENT)``. find_element() version 返回元素)
由于上面的行返回元素,您可以将其与.click()组合起来,如下所示:
@@ -638,6 +647,7 @@ self.click('a[name*="partial_name"]')
self.assert_text("Make it so!", "div#trek div.picard div.quotes")
self.assert_text("Tea. Earl Grey. Hot.", "div#trek div.picard div.quotes", timeout=3)
```
+
(注意: ``self.find_text(TEXT, ELEMENT)`` 和 ``self.wait_for_text(TEXT, ELEMENT)`` 干了同一件事. 为了向后字兼容性,保留了较旧的方法名,但默认超时可能不同.)
断言 anything
@@ -651,6 +661,7 @@ self.assert_equal(var1, var2)
有用的条件语句 (with creative examples in action)
is_element_visible(selector) # is an element visible on a page
+
```python
if self.is_element_visible('div#warning'):
print("Red Alert: Something bad might be happening!")
@@ -674,6 +685,7 @@ def is_there_a_cloaked_klingon_ship_on_this_page():
```
is_text_visible(text, selector) # is text visible on a page
+
```python
def get_mirror_universe_captain_picard_superbowl_ad(superbowl_year):
selector = "div.superbowl_%s div.commercials div.transcript div.picard" % superbowl_year
@@ -776,6 +788,7 @@ referral_link = '''Free-Referral Button!
self.execute_script('''document.body.innerHTML = \"%s\"''' % referral_link)
self.click("a.analytics") # Clicks the generated button
```
+
(由于大众需求,这个流量生成示例已经被嵌入到SeleniumBase中 ``self.generate_referral(start_page, end_page)`` 和 ``self.generate_traffic(start_page, end_page, loops)`` 方法中.)
使用延迟的断言:
@@ -811,6 +824,7 @@ self.driver.delete_all_cookies()
capabilities = self.driver.capabilities
self.driver.find_elements_by_partial_link_text("GitHub")
```
+
(通常,您会希望在可用时使用带方法的SeleniumBase版本.)
自动重试失败的测试
diff --git a/help_docs/desired_capabilities.md b/help_docs/desired_capabilities.md
index 0e321155..5cf829d7 100755
--- a/help_docs/desired_capabilities.md
+++ b/help_docs/desired_capabilities.md
@@ -76,7 +76,7 @@ If you pass ``"*"`` into the ``"name"`` field of ``--cap-string``, the name will
```bash
pytest test_swag_labs.py --cap-string='{"browserName":"chrome","name":"*"}' --server="127.0.0.1" --browser=chrome
```
-Example name: ``"my_first_test.MyTestClass.test_basic"``
+Example name: ``"my_first_test.MyTestClass.test_basics"``
Using a local Selenium Grid
diff --git a/help_docs/syntax_formats.md b/help_docs/syntax_formats.md
index 8404126e..f037ce49 100755
--- a/help_docs/syntax_formats.md
+++ b/help_docs/syntax_formats.md
@@ -25,7 +25,7 @@ class MyTestClass(BaseCase):
self.click("#myButton")
self.assert_element("tbody#tbodyId")
self.assert_text("Automation Practice", "h3")
- self.click_link_text("SeleniumBase Demo Page")
+ self.click_link("SeleniumBase Demo Page")
self.assert_exact_text("Demo Page", "h1")
self.assert_no_js_errors()
```
diff --git a/integrations/node_js/my_first_test.py b/integrations/node_js/my_first_test.py
index 4ea77ff1..cce4957b 100755
--- a/integrations/node_js/my_first_test.py
+++ b/integrations/node_js/my_first_test.py
@@ -3,8 +3,9 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
- def test_basic(self):
- self.open("https://store.xkcd.com/search")
+ def test_basics(self):
+ url = "https://store.xkcd.com/collections/posters"
+ self.open(url)
self.type('input[name="q"]', "xkcd book")
self.click('input[value="Search"]')
self.assert_text("xkcd: volume 0", "h3")
@@ -14,7 +15,5 @@ class MyTestClass(BaseCase):
self.click('a[rel="license"]')
self.assert_text("free to copy and reuse")
self.go_back()
- self.click_link_text("About")
+ self.click_link("About")
self.assert_exact_text("xkcd.com", "h2")
- self.click_link_text("geohashing")
- self.assert_element("#comic img")
diff --git a/integrations/node_js/test_demo_site.py b/integrations/node_js/test_demo_site.py
index e7a9eddd..662ab537 100755
--- a/integrations/node_js/test_demo_site.py
+++ b/integrations/node_js/test_demo_site.py
@@ -89,7 +89,7 @@ class MyTestClass(BaseCase):
self.assert_link_text("seleniumbase.io")
# Click link text
- self.click_link_text("SeleniumBase Demo Page")
+ self.click_link("SeleniumBase Demo Page")
# Assert exact text
self.assert_exact_text("Demo Page", "h1")