44 from selenium
import webdriver
45 from selenium.webdriver.common.keys
import Keys
46 from selenium.webdriver.common.by
import By
47 from selenium.webdriver.support
import expected_conditions
as EC
48 from selenium.webdriver.support.ui
import Select
51 selenium_version = pkg_resources.get_distribution(
"selenium").version
53 if pkg_resources.parse_version(selenium_version) >= pkg_resources.parse_version(
"4.3.0"):
54 from selenium.webdriver.support.ui
import WebDriverWait
55 from selenium.webdriver.common.by
import By
57 from std_msgs.msg
import Float64
59 CLASSNAME =
'rwt_plot' 68 super(TestRwtPlot, self).
__init__(*args)
69 rospy.init_node(
'test_rwt_plot')
72 parser = argparse.ArgumentParser()
73 parser.add_argument(
'--no-headless', action=
'store_true',
74 help=
'start webdriver with headless mode')
75 args, unknown = parser.parse_known_args()
80 rospy.Subscriber(
'/sin', Float64, self.
sin_cb)
81 self.
url_base = rospy.get_param(
"url_roswww_testserver")
83 opts = webdriver.firefox.options.Options()
84 if not args.no_headless:
85 opts.add_argument(
'-headless')
86 self.
browser = webdriver.Firefox(options=opts)
88 self.
wait = webdriver.support.ui.WebDriverWait(self.
browser, 10)
90 if pkg_resources.parse_version(selenium_version) >= pkg_resources.parse_version(
"4.3.0"):
91 self.
browser.fullscreen_window()
93 self.
browser.find_element_by_tag_name(
"html").send_keys(Keys.F11)
103 url =
'%s/rwt_plot' % (self.
url_base)
104 rospy.logwarn(
"Accessing to %s" % url)
109 self.
wait.until(EC.presence_of_element_located((By.ID,
"button-ros-master-settings")))
111 self.assertIsNotNone(settings,
"Object id=button-ros-master-settings not found")
114 self.
wait.until(EC.presence_of_element_located((By.ID,
"input-ros-master-uri")))
116 self.assertIsNotNone(uri,
"Object id=input-ros-master-uri not found")
118 uri.send_keys(
'ws://localhost:9090/')
120 self.
wait.until(EC.presence_of_element_located((By.ID,
"button-ros-master-connect")))
122 self.assertIsNotNone(connect,
"Object id=button-ros-master-connect")
127 while topic_text ==
'':
129 self.
wait.until(EC.presence_of_element_located((By.ID,
"topic-select")))
131 self.assertIsNotNone(topic,
"Object id=topic-select not found")
132 topic_text = topic.text
133 self.assertTrue(
u'/sin' in topic_text)
135 Select(topic).select_by_value(
'/sin')
138 self.
wait.until(EC.presence_of_element_located((By.ID,
"field-accessor")))
140 self.assertIsNotNone(field,
"Object id=field-accessor not found")
142 field.send_keys(
'data')
144 self.
wait.until(EC.presence_of_element_located((By.ID,
"topic-field-button")))
146 self.assertIsNotNone(plot,
"Object id=topic-field-button")
150 self.
wait.until(EC.presence_of_element_located((By.ID,
"message-detail")))
152 self.assertIsNotNone(topic_type,
"Object id=message-detail")
156 self.
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,
"g.x")))
158 self.assertIsNotNone(x_axis,
"Object id=x_axis")
159 x_axis_value = x_axis.text
161 x_axis_value_updated = 0
166 rospy.logwarn(
"check if tick updated {} < {} ({})".format(x_axis_value, x_axis.text, x_axis_value_updated))
167 if x_axis_value != x_axis.text:
168 x_axis_value_updated = x_axis_value_updated + 1
169 if x_axis_value_updated >= 4:
171 x_axis_value = x_axis.text
173 self.assertNotEqual(x_axis_value, x_axis.text)
176 if pkg_resources.parse_version(selenium_version) >= pkg_resources.parse_version(
"4.3.0"):
177 return self.
browser.find_element(By.ID, name)
182 if pkg_resources.parse_version(selenium_version) >= pkg_resources.parse_version(
"4.3.0"):
183 return self.
browser.find_element(By.CSS_SELECTOR, name)
188 if __name__ ==
'__main__':
190 rostest.run(
'rwt_plot', CLASSNAME, TestRwtPlot, sys.argv)
191 except KeyboardInterrupt:
193 print(
"{} exiting".format(CLASSNAME))
def find_element_by_css_selector(self, name)
def find_element_by_id(self, name)